﻿using BrightIdeasSoftware;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FormTest
{
    public partial class Form4 : Form
    {
        private DataListView _dataListView;
        private DataTable _sampleData;
        public Form4()
        {
            InitializeComponent();
            InitializeDataListView();
            LoadSampleData();
            BindData();
        }

        private void InitializeDataListView()
        {
            _dataListView = new DataListView
            {
                Dock = DockStyle.Fill,
                View = View.Details,
                GridLines = true,
                FullRowSelect = true,
                UseAlternatingBackColors = true,
                OwnerDraw = true, // 关键：启用自绘以支持换行
                HeaderWordWrap = true, // 列标题也支持换行
                RowHeight = -1, // 自动计算行高（重要）
                ShowGroups = false,
            };

            // 添加列并配置自动换行
            _dataListView.Columns.AddRange(new OLVColumn[]
            {
                new OLVColumn("ID", "Id") { Width = 60, WordWrap = false }, // ID列不换行
                new OLVColumn("产品名称", "Name") { Width = 150, WordWrap = true },
                new OLVColumn("详细描述", "Description") { Width = 300, WordWrap = true }, // 长文本列
                new OLVColumn("价格", "Price") { Width = 100, WordWrap = false, TextAlign = HorizontalAlignment.Right }
            });

            // 绑定事件：计算并设置行高
            //_dataListView.FormatCell += DataListView_CellFormatting;
            _dataListView.FormatCell += _dataListView_FormatCell;
            //_dataListView.MeasureItem += DataListView_MeasureItem;

            // 添加到窗体
            Controls.Add(_dataListView);
        }

        private void _dataListView_FormatCell(object sender, FormatCellEventArgs e)
        {
            // 使用控件的字体进行测量（确保一致性）
            e.SubItem.Font = _dataListView.Font;
        }

        // 格式化单元格内容（确保使用正确的字体）


        // 计算行高以适应换行后的内容
        //private void DataListView_MeasureItem(object sender, MeasureItemEventArgs e)
        //{
        //    if (_dataListView.Items.Count == 0 || e.Index < 0)
        //        return;

        //    int maxHeight = 0;
        //    var graphics = _dataListView.CreateGraphics();

        //    // 遍历所有列，找到内容高度最大的列
        //    for (int i = 0; i < _dataListView.Columns.Count; i++)
        //    {
        //        var column = _dataListView.Columns[i];
        //        if (!column.WordWrap)
        //        {
        //            // 不换行的列使用默认高度
        //            maxHeight = Math.Max(maxHeight, _dataListView.Font.Height + 4);
        //            continue;
        //        }

        //        // 获取单元格内容
        //        string text = _dataListView.Items[e.Index].SubItems[i].Text;
        //        if (string.IsNullOrEmpty(text))
        //            continue;

        //        // 计算文本在指定宽度内需要的高度（考虑自动换行）
        //        var size = graphics.MeasureString(
        //            text,
        //            _dataListView.Font,
        //            column.Width - 4, // 减去内边距
        //            StringFormat.GenericDefault
        //        );

        //        // 取整并添加边距
        //        int height = (int)Math.Ceiling(size.Height) + 4;
        //        maxHeight = Math.Max(maxHeight, height);
        //    }

        //    // 设置行高（至少为默认高度）
        //    e.ItemHeight = Math.Max(maxHeight, _dataListView.Font.Height + 4);
        //}


        // 加载示例数据（包含长文本）
        private void LoadSampleData()
        {
            _sampleData = new DataTable();
            _sampleData.Columns.AddRange(new DataColumn[]
            {
                new DataColumn("Id", typeof(int)),
                new DataColumn("Name", typeof(string)),
                new DataColumn("Description", typeof(string)),
                new DataColumn("Price", typeof(decimal))
            });

            // 添加包含长文本的数据
            _sampleData.Rows.Add(
                1,
                "高性能笔记本电脑",
                "这款笔记本电脑配备最新处理器和独立显卡，适合游戏和专业设计工作。支持快速充电和长效续航，满足移动办公需求。",
                7999.99
            );
            _sampleData.Rows.Add(
                2,
                "无线蓝牙耳机",
                "主动降噪技术，高清通话，续航长达30小时。IPX7防水等级，适合运动时使用。",
                899.00
            );
            _sampleData.Rows.Add(
                3,
                "机械键盘",
                "红轴开关，触发快，声音小，适合长时间打字。全键无冲，RGB背光可自定义。",
                399.50
            );
        }

        // 绑定数据
        private void BindData()
        {
            _dataListView.DataSource = _sampleData;
        }
    }
}
